entry
    \ await let binary := { data::#Canvas@serialize canvas },
    \ await (sys::Stdout write binary).{crash-on-error},
    { return () };

const canvas: data::#Canvas
    { |data::#Canvas| {
        shapes: [
            { |data::#Shape| { |data::#Line| (
                { |data::#Point| { name: 'A', pos: { |data::#Vector| (1.0, 2.0) } } },
                { |data::#Point| { name: 'B', pos: { |data::#Vector| (3.0, 4.0) } } }) } },
            { |data::#Shape| { |data::#Polygon| {
                points: [
                    { |data::#Point| { name: 'O', pos: { |data::#Vector| (0.0, 0.0) } } },
                    { |data::#Point| { name: 'C', pos: { |data::#Vector| (-1.5, 0.5) } } },
                    { |data::#Point| { name: 'D', pos: { |data::#Vector| (-1.5, -2.0) } } }
                ]
            } } },
            { |data::#Shape| { |data::#Circle| {
                center: { |data::#Point| { name: 'P', pos: { |data::#Vector| (5.0, 5.0) } } },
                radius: 15.5
            } } }
        ]
    } };


